home *** CD-ROM | disk | FTP | other *** search
- import java.awt.Color;
- import java.awt.Event;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Point;
- import java.awt.Rectangle;
- import java.awt.Toolkit;
- import java.io.DataInputStream;
-
- public class CRtfAction extends CDisplayAction {
- static final int LOAD_FROM_FILE = 128;
- protected String m_strText;
- protected String m_strFileName;
- protected Color m_rgbBackground = new Color(0, 0, 0);
- protected Color m_rgbShadow = new Color(0, 0, 0);
- protected byte m_cShadowOffsetX;
- protected byte m_cShadowOffsetY;
- protected int m_nFlags;
- private String m_strPaintText = "";
- private RichCharArray m_RichCharArray = new RichCharArray();
- private HTRegionArray m_htrArray = new HTRegionArray();
- private CRectArray m_rcArray = new CRectArray();
- private String m_strHyperText = "";
- private int m_nBulletIndent = 0;
- private boolean m_bIndented = false;
-
- boolean DoAction() {
- boolean var1 = false;
- if ((this.m_nFlags & 128) == 0) {
- if (this.m_strText.equals("")) {
- System.out.println("Error: Rich text string missing");
- } else {
- String var2 = Utils.InsertVariablesInString(this.m_strText, true);
- if (!this.m_strPaintText.equals(var2)) {
- this.m_strPaintText = var2;
- var1 = true;
- }
- }
- } else if (this.m_strFileName.equals("")) {
- System.out.println("Error: Rich text filename missing");
- } else {
- System.out.println("Rich text action does not presently support load from file");
- }
-
- CRtfParser var4 = new CRtfParser(this.m_strPaintText);
- this.m_RichCharArray = var4.ParseRtfFile(this.m_strPaintText);
- CRect var3 = new CRect(((CDisplayAction)this).GetActualRect());
- var3.x += 8;
- var3.width -= 8;
- if (!((Rectangle)var3).equals(((CDisplayAction)this).GetDrawRect())) {
- if (!((CDisplayAction)this).GetDrawRect().isEmpty()) {
- Globals.thePresView.InvalidateOffScreenRect(((CDisplayAction)this).GetDrawRect());
- }
-
- ((CDisplayAction)this).SetDrawRect(var3);
- var1 = true;
- }
-
- if (super.m_Effect.HasValidEffect()) {
- Globals.thePresView.RenderAndDrawDirtyList();
- Globals.thePresView.AddDrawObject((CIconObject)this, 2048, var1);
- } else {
- Globals.thePresView.AddDrawObject((CIconObject)this, 0, var1);
- }
-
- return true;
- }
-
- void DrawObject(Graphics var1, int var2, CRect var3) {
- new CRect();
- int var5 = 0;
- int var6 = 0;
- int var7 = var3.y;
- Graphics var8 = var1.create();
- var8.clipRect(var3.x, var3.y, var3.width, var3.height);
- this.m_htrArray.RemoveAll();
- this.m_rcArray.RemoveAll();
- this.m_strHyperText = "";
- if ((this.m_nFlags & 16) != 0) {
- var8.setColor(this.m_rgbBackground);
- var8.fillRect(var3.x, var3.y, var3.width, var3.height);
- }
-
- while(var6 < this.m_RichCharArray.GetSize() && (var7 < var3.y + var3.height || !this.m_strHyperText.equals(""))) {
- int var9 = this.m_bIndented ? this.m_nBulletIndent : 0;
- if (var5 != 0) {
- var5 = this.FindNextLineStartIndex(var6);
- }
-
- if ((this.m_nFlags & 8) != 0) {
- var6 = this.FindNextLineEndIndex(var5, var3.width - Math.abs(this.m_cShadowOffsetX) - var9);
- } else {
- var6 = this.FindNextLineEndIndex(var5, var3.width - var9);
- }
-
- CRect var4 = this.GetLineDimensions(var7, var5, var6);
- if ((this.m_RichCharArray.GetAt(var5).Flags & 1) != 0) {
- var4.x = var3.x + (var3.width - var4.width);
- if ((this.m_nFlags & 8) != 0 && this.m_cShadowOffsetX > 0) {
- var4.x -= this.m_cShadowOffsetX;
- }
- } else if ((this.m_RichCharArray.GetAt(var5).Flags & 2) != 0) {
- var4.x = var3.x + (var3.width - var4.width) / 2;
- if ((this.m_nFlags & 8) != 0) {
- var4.x -= this.m_cShadowOffsetX / 2;
- }
- } else {
- var4.x = var3.x + var9;
- if ((this.m_nFlags & 8) != 0 && this.m_cShadowOffsetX < 0) {
- var4.x -= this.m_cShadowOffsetX;
- }
- }
-
- if ((this.m_nFlags & 8) != 0 && this.m_cShadowOffsetY < 0) {
- var4.y -= this.m_cShadowOffsetY;
- }
-
- if ((this.m_nFlags & 8) != 0) {
- ((Rectangle)var4).move(var4.x + this.m_cShadowOffsetX, var4.y + this.m_cShadowOffsetY);
- this.DrawLine(var8, var4, var5, var6, true);
- ((Rectangle)var4).move(var4.x - this.m_cShadowOffsetX, var4.y - this.m_cShadowOffsetY);
- }
-
- this.DrawLine(var8, var4, var5, var6, false);
- var7 += var4.height;
- var5 = var6;
- }
-
- }
-
- boolean LoadFromFile(DataInputStream var1) {
- this.m_nFlags = FileLoad.ReadCPlusInt(var1);
- FileLoad.ReadColor(var1);
- this.m_rgbBackground = FileLoad.ReadColor(var1);
- this.m_strText = FileLoad.ReadCString(var1);
- this.m_cShadowOffsetX = (byte)FileLoad.ReadCPlusByte(var1);
- this.m_cShadowOffsetY = (byte)FileLoad.ReadCPlusByte(var1);
- this.m_rgbShadow = FileLoad.ReadColor(var1);
- FileLoad.ReadCPlusByte(var1);
- this.m_strFileName = FileLoad.ReadCString(var1);
- CFontObject var2 = new CFontObject();
- var2.LoadFromFile(var1);
- return super.LoadFromFile(var1);
- }
-
- CRect GetLineDimensions(int var1, int var2, int var3) {
- FontMetrics var5 = Toolkit.getDefaultToolkit().getFontMetrics(this.m_RichCharArray.GetAt(var2).Font);
- CRect var6 = new CRect(0, var1 + var5.getAscent(), 0, var5.getHeight());
-
- for(int var7 = var2; var7 < var3; ++var7) {
- RichChar var4 = this.m_RichCharArray.GetAt(var7);
- if (!var4.Font.equals(var5.getFont())) {
- var5 = Toolkit.getDefaultToolkit().getFontMetrics(var4.Font);
- var6.y = Math.max(var6.y, var1 + var5.getAscent());
- var6.height = Math.max(var6.height, var5.getHeight());
- }
-
- var6.width += var4.Width;
- }
-
- return var6;
- }
-
- void DrawLine(Graphics var1, CRect var2, int var3, int var4, boolean var5) {
- int var7 = var2.x;
- if (var5) {
- var1.setColor(this.m_rgbShadow);
- }
-
- for(int var8 = var3; var8 < var4; ++var8) {
- RichChar var6 = this.m_RichCharArray.GetAt(var8);
- if (var6.Char != '\n') {
- if (var6.Char != '\t') {
- if (!var1.getFont().equals(var6.Font)) {
- var1.setFont(var6.Font);
- }
-
- if (!var5 && !var1.getColor().equals(var6.Colour)) {
- var1.setColor(var6.Colour);
- }
-
- var1.drawString(String.valueOf(var6.Char), var7, var2.y);
- if ((var6.Flags & 8) != 0) {
- int var9 = Math.max(1, var6.Font.getSize() / 20);
- if (var6.Font.isBold()) {
- var9 *= 2;
- }
-
- var1.fillRect(var7, var2.y + var1.getFontMetrics().getDescent() / 2, var6.Width, var9);
- }
-
- if ((var6.Flags & 16) != 0) {
- int var10 = Math.max(1, var6.Font.getSize() / 20);
- if (var6.Font.isBold()) {
- ++var10;
- }
-
- var1.fillRect(var7, var2.y - (var1.getFontMetrics().getAscent() / 3 + var10 / 2), var6.Width, var10);
- }
- }
-
- var7 += var6.Width;
- }
-
- if (!var5) {
- if ((var6.Flags & 4) != 0) {
- if (var6.Char == '\n') {
- String var11 = this.m_strHyperText;
- this.m_strHyperText = var11 + "\r\n";
- } else {
- String var10001 = this.m_strHyperText;
- this.m_strHyperText = var10001 + var6.Char;
- if (this.m_rcArray.GetSize() == 0) {
- this.m_rcArray.Add(new CRect(var7 - var6.Width, var2.y - var1.getFontMetrics().getAscent(), var6.Width, var2.height));
- } else if (this.m_rcArray.GetAt(this.m_rcArray.GetUpperBound()).getRight() == var7 && this.m_rcArray.GetAt(this.m_rcArray.GetUpperBound()).y == var2.y - var1.getFontMetrics().getAscent()) {
- CRect var10000 = this.m_rcArray.GetAt(this.m_rcArray.GetUpperBound());
- var10000.width += var6.Width;
- } else {
- this.m_rcArray.Add(new CRect(var7 - var6.Width, var2.y - var1.getFontMetrics().getAscent(), var6.Width, var2.height));
- }
- }
- } else if (!this.m_strHyperText.equals("")) {
- this.AddHypertextRegion();
- }
-
- if (var8 == this.m_RichCharArray.GetUpperBound() && !this.m_strHyperText.equals("")) {
- this.AddHypertextRegion();
- }
- }
- }
-
- }
-
- void AddHypertextRegion() {
- this.m_strHyperText = this.m_strHyperText.trim();
- this.m_htrArray.Add(new HyperTextRegion(this.m_strHyperText, this.m_rcArray));
- this.m_strHyperText = "";
- this.m_rcArray.RemoveAll();
- }
-
- int FindNextLineEndIndex(int var1, int var2) {
- int var5 = 0;
- int var3 = var1;
-
- int var4;
- for(var4 = var1; var5 <= var2 && var3 < this.m_RichCharArray.GetSize(); ++var3) {
- switch (this.m_RichCharArray.GetAt(var3).Char) {
- case '\t':
- if (this.m_nBulletIndent == 0) {
- this.m_nBulletIndent = Math.max(1, this.m_RichCharArray.GetAt(var3).Width);
- }
-
- int var6;
- for(var6 = this.m_nBulletIndent; var6 <= var5; var6 += this.m_nBulletIndent) {
- }
-
- this.m_RichCharArray.GetAt(var3).Width = var6 - var5;
- var5 = var6;
- if (var6 > var2 && var4 == var1) {
- var4 = Math.max(var3, var1 + 1);
- }
- break;
- case '\n':
- var4 = var3 + 1;
- var5 = var2 + 1;
- this.m_bIndented = false;
- break;
- case ' ':
- var5 += this.m_RichCharArray.GetAt(var3).Width;
- if (var3 > 0 && this.m_RichCharArray.GetAt(var3 - 1).Char != ' ') {
- var4 = var3;
- }
- break;
- case '┬╖':
- this.m_bIndented = true;
- default:
- var5 += this.m_RichCharArray.GetAt(var3).Width;
- if (var5 > var2 && var4 == var1) {
- var4 = Math.max(var3, var1 + 1);
- }
- }
- }
-
- if (var3 == this.m_RichCharArray.GetSize() && var4 == var1) {
- var4 = Math.max(var3, var1 + 1);
- }
-
- return var4;
- }
-
- int FindNextLineStartIndex(int var1) {
- RichChar var2;
- if (this.m_RichCharArray.GetAt(var1 - 1).Char != '\n') {
- for(; (var2 = this.m_RichCharArray.GetAt(var1)).Char == ' ' && var1 < this.m_RichCharArray.GetSize(); ++var1) {
- if ((var2.Flags & 4) != 0) {
- String var10001 = this.m_strHyperText;
- this.m_strHyperText = var10001 + var2.Char;
- } else if (!this.m_strHyperText.equals("")) {
- this.AddHypertextRegion();
- }
- }
- }
-
- return var1;
- }
-
- boolean OnMouseClick(int var1, int var2, Point var3, int var4, CRect var5) {
- if (var4 == 6 && var1 == 2022) {
- for(int var6 = 0; var6 < this.m_htrArray.GetSize(); ++var6) {
- for(int var7 = 0; var7 < this.m_htrArray.GetAt(var6).m_rcArray.GetSize(); ++var7) {
- if (this.m_htrArray.GetAt(var6).m_rcArray.GetAt(var7).inside(var3.x, var3.y)) {
- Event var8 = new Event(Globals.thePresView, 2029, this.m_htrArray.GetAt(var6).m_strHyperText);
- var8.modifiers = 32898;
- Globals.thePresView.postEvent(var8);
- }
- }
- }
- }
-
- return false;
- }
-
- public CRtfAction() {
- super(55);
- ((CDisplayAction)this).SetZOrder((short)4);
- }
- }
-